## Will start with importing data
import pandas as pd
# We will begin by loading a data file for Atwater Village that details the structures built in the area.
# note the relative filepath! where is this file located?
df = pd.read_csv('data/Atwater2018_HHIncomeCategories.csv')
df = pd.read_csv(
'data/Atwater2018_HHIncomeCategories.csv',
dtype=
{
'Geo_FIPS':str,
'Geo_STATE':str,
'Geo_COUNTY': str
}
)
df.columns[df.isna().all()].tolist()
['Geo_US', 'Geo_REGION', 'Geo_DIVISION', 'Geo_STATECE', 'Geo_COUSUB', 'Geo_PLACE', 'Geo_PLACESE', 'Geo_CONCIT', 'Geo_AIANHH', 'Geo_AIANHHFP', 'Geo_AIHHTLI', 'Geo_AITSCE', 'Geo_AITS', 'Geo_ANRC', 'Geo_CBSA', 'Geo_CSA', 'Geo_METDIV', 'Geo_MACC', 'Geo_MEMI', 'Geo_NECTA', 'Geo_CNECTA', 'Geo_NECTADIV', 'Geo_UA', 'Geo_UACP', 'Geo_CDCURR', 'Geo_SLDU', 'Geo_SLDL', 'Geo_VTD', 'Geo_ZCTA3', 'Geo_ZCTA5', 'Geo_SUBMCD', 'Geo_SDELM', 'Geo_SDSEC', 'Geo_SDUNI', 'Geo_UR', 'Geo_PCI', 'Geo_TAZ', 'Geo_UGA', 'Geo_BTTR', 'Geo_BTBG', 'Geo_PUMA5', 'Geo_PUMA1']
df = df.dropna(axis=1,how="all")
df.head()
| Geo_FIPS | Geo_GEOID | Geo_NAME | Geo_QName | Geo_STUSAB | Geo_SUMLEV | Geo_GEOCOMP | Geo_FILEID | Geo_LOGRECNO | Geo_STATE | Geo_COUNTY | Geo_TRACT | Geo_BLKGRP | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | 15000US060371863011 | Block Group 1 | Block Group 1, Census Tract 1863.01, Los Angel... | ca | 150 | 0 | ACSSF | 15233 | 06 | 037 | 186301 | 1 | 296 | 39 | 40 | 71 | 14 | 132 |
| 1 | 060371863012 | 15000US060371863012 | Block Group 2 | Block Group 2, Census Tract 1863.01, Los Angel... | ca | 150 | 0 | ACSSF | 15234 | 06 | 037 | 186301 | 2 | 286 | 79 | 112 | 38 | 10 | 47 |
| 2 | 060371863013 | 15000US060371863013 | Block Group 3 | Block Group 3, Census Tract 1863.01, Los Angel... | ca | 150 | 0 | ACSSF | 15235 | 06 | 037 | 186301 | 3 | 308 | 81 | 124 | 55 | 25 | 23 |
| 3 | 060371863021 | 15000US060371863021 | Block Group 1 | Block Group 1, Census Tract 1863.02, Los Angel... | ca | 150 | 0 | ACSSF | 15236 | 06 | 037 | 186302 | 1 | 578 | 129 | 83 | 112 | 92 | 162 |
| 4 | 060371864011 | 15000US060371864011 | Block Group 1 | Block Group 1, Census Tract 1864.01, Los Angel... | ca | 150 | 0 | ACSSF | 15239 | 06 | 037 | 186401 | 1 | 655 | 178 | 151 | 163 | 72 | 91 |
# list of additional columns to drop
columns_to_drop = ['Geo_GEOID','Geo_STUSAB','Geo_SUMLEV','Geo_GEOCOMP','Geo_FILEID','Geo_LOGRECNO','Geo_STATE','Geo_COUNTY','Geo_TRACT']
# next, drop them!
df = df.drop(columns_to_drop,axis=1)
df.head()
| Geo_FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1 | Block Group 1, Census Tract 1863.01, Los Angel... | 1 | 296 | 39 | 40 | 71 | 14 | 132 |
| 1 | 060371863012 | Block Group 2 | Block Group 2, Census Tract 1863.01, Los Angel... | 2 | 286 | 79 | 112 | 38 | 10 | 47 |
| 2 | 060371863013 | Block Group 3 | Block Group 3, Census Tract 1863.01, Los Angel... | 3 | 308 | 81 | 124 | 55 | 25 | 23 |
| 3 | 060371863021 | Block Group 1 | Block Group 1, Census Tract 1863.02, Los Angel... | 1 | 578 | 129 | 83 | 112 | 92 | 162 |
| 4 | 060371864011 | Block Group 1 | Block Group 1, Census Tract 1864.01, Los Angel... | 1 | 655 | 178 | 151 | 163 | 72 | 91 |
df.columns = ['FIPS',
'Geo_NAME',
'Geo_QName',
'Geo_BLKGRP',
'Total Households in Atwater Village',
'Household Income Less than $25,000',
'Household Income $25,000 to $49,999',
'Household Income $50,000 to $74,999',
'Household Income $75,000 to $99,999',
'Household Income $100,000 or More']
df.head()
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1 | Block Group 1, Census Tract 1863.01, Los Angel... | 1 | 296 | 39 | 40 | 71 | 14 | 132 |
| 1 | 060371863012 | Block Group 2 | Block Group 2, Census Tract 1863.01, Los Angel... | 2 | 286 | 79 | 112 | 38 | 10 | 47 |
| 2 | 060371863013 | Block Group 3 | Block Group 3, Census Tract 1863.01, Los Angel... | 3 | 308 | 81 | 124 | 55 | 25 | 23 |
| 3 | 060371863021 | Block Group 1 | Block Group 1, Census Tract 1863.02, Los Angel... | 1 | 578 | 129 | 83 | 112 | 92 | 162 |
| 4 | 060371864011 | Block Group 1 | Block Group 1, Census Tract 1864.01, Los Angel... | 1 | 655 | 178 | 151 | 163 | 72 | 91 |
df['Total Households in Atwater Village'].head()
0 296 1 286 2 308 3 578 4 655 Name: Total Households in Atwater Village, dtype: int64
df.head()
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1 | Block Group 1, Census Tract 1863.01, Los Angel... | 1 | 296 | 39 | 40 | 71 | 14 | 132 |
| 1 | 060371863012 | Block Group 2 | Block Group 2, Census Tract 1863.01, Los Angel... | 2 | 286 | 79 | 112 | 38 | 10 | 47 |
| 2 | 060371863013 | Block Group 3 | Block Group 3, Census Tract 1863.01, Los Angel... | 3 | 308 | 81 | 124 | 55 | 25 | 23 |
| 3 | 060371863021 | Block Group 1 | Block Group 1, Census Tract 1863.02, Los Angel... | 1 | 578 | 129 | 83 | 112 | 92 | 162 |
| 4 | 060371864011 | Block Group 1 | Block Group 1, Census Tract 1864.01, Los Angel... | 1 | 655 | 178 | 151 | 163 | 72 | 91 |
df_sum= df.sum().reset_index()
df_sum=df_sum.set_index('index').T
df_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1Block Group 2Block Group 3Block G... | Block Group 1, Census Tract 1863.01, Los Angel... | 31 | 8801 | 1982 | 1644 | 1413 | 1028 | 2734 |
df_sum['% Less than $25K'] = df_sum['Household Income Less than $25,000']/df_sum['Total Households in Atwater Village']*100
df_sum['% More than $100K'] = df_sum['Household Income $100,000 or More']/df_sum['Total Households in Atwater Village']*100
df_sum['neighborhood'] = 'Atwater'
df_sum['year'] = '2018'
df_sum.plot.bar(x = 'neighborhood', y='% Less than $25K', title="Percentage of Households with Income Less than $25K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa82d552100>
df_sum.plot.bar(x = 'neighborhood', y='% More than $100K', title="Percentage of Households with Income More than $100K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa82b4cb4f0>
df_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | % Less than $25K | % More than $100K | neighborhood | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1Block Group 2Block Group 3Block G... | Block Group 1, Census Tract 1863.01, Los Angel... | 31 | 8801 | 1982 | 1644 | 1413 | 1028 | 2734 | 22.5202 | 31.0647 | Atwater | 2018 |
df['neighborhood'] = 'Atwater'
df['p_less_25k'] = df['Household Income Less than $25,000']/df['Total Households in Atwater Village']*100
df['p_more_100k'] = df['Household Income $100,000 or More']/df['Total Households in Atwater Village']*100
df['Total Households'] = df ['Total Households in Atwater Village']
df = df.dropna(axis=1,how="all")
df.head()
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | neighborhood | p_less_25k | p_more_100k | Total Households | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1 | Block Group 1, Census Tract 1863.01, Los Angel... | 1 | 296 | 39 | 40 | 71 | 14 | 132 | Atwater | 13.175676 | 44.594595 | 296 |
| 1 | 060371863012 | Block Group 2 | Block Group 2, Census Tract 1863.01, Los Angel... | 2 | 286 | 79 | 112 | 38 | 10 | 47 | Atwater | 27.622378 | 16.433566 | 286 |
| 2 | 060371863013 | Block Group 3 | Block Group 3, Census Tract 1863.01, Los Angel... | 3 | 308 | 81 | 124 | 55 | 25 | 23 | Atwater | 26.298701 | 7.467532 | 308 |
| 3 | 060371863021 | Block Group 1 | Block Group 1, Census Tract 1863.02, Los Angel... | 1 | 578 | 129 | 83 | 112 | 92 | 162 | Atwater | 22.318339 | 28.027682 | 578 |
| 4 | 060371864011 | Block Group 1 | Block Group 1, Census Tract 1864.01, Los Angel... | 1 | 655 | 178 | 151 | 163 | 72 | 91 | Atwater | 27.175573 | 13.893130 | 655 |
import plotly.express as px
import pandas as pd
df2 = pd.read_csv('data/Leimert2018_HHIncomeCategories.csv')
df2 = pd.read_csv(
'data/Leimert2018_HHIncomeCategories.csv',
dtype=
{
'Geo_FIPS':str,
'Geo_STATE':str,
'Geo_COUNTY': str
}
)
df2.head()
| Geo_FIPS | Geo_GEOID | Geo_NAME | Geo_QName | Geo_STUSAB | Geo_SUMLEV | Geo_GEOCOMP | Geo_FILEID | Geo_LOGRECNO | Geo_US | ... | Geo_BTTR | Geo_BTBG | Geo_PUMA5 | Geo_PUMA1 | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | 15000US060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | ca | 150 | 0 | ACSSF | 15884 | NaN | ... | NaN | NaN | NaN | NaN | 323 | 103 | 35 | 107 | 51 | 27 |
| 1 | 060372340001 | 15000US060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16105 | NaN | ... | NaN | NaN | NaN | NaN | 628 | 181 | 149 | 112 | 36 | 150 |
| 2 | 060372340002 | 15000US060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16106 | NaN | ... | NaN | NaN | NaN | NaN | 260 | 14 | 61 | 29 | 11 | 145 |
| 3 | 060372340003 | 15000US060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16107 | NaN | ... | NaN | NaN | NaN | NaN | 299 | 18 | 87 | 25 | 29 | 140 |
| 4 | 060372340004 | 15000US060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16108 | NaN | ... | NaN | NaN | NaN | NaN | 580 | 201 | 32 | 138 | 110 | 99 |
5 rows × 61 columns
df2.columns[df2.isna().all()].tolist()
['Geo_US', 'Geo_REGION', 'Geo_DIVISION', 'Geo_STATECE', 'Geo_COUSUB', 'Geo_PLACE', 'Geo_PLACESE', 'Geo_CONCIT', 'Geo_AIANHH', 'Geo_AIANHHFP', 'Geo_AIHHTLI', 'Geo_AITSCE', 'Geo_AITS', 'Geo_ANRC', 'Geo_CBSA', 'Geo_CSA', 'Geo_METDIV', 'Geo_MACC', 'Geo_MEMI', 'Geo_NECTA', 'Geo_CNECTA', 'Geo_NECTADIV', 'Geo_UA', 'Geo_UACP', 'Geo_CDCURR', 'Geo_SLDU', 'Geo_SLDL', 'Geo_VTD', 'Geo_ZCTA3', 'Geo_ZCTA5', 'Geo_SUBMCD', 'Geo_SDELM', 'Geo_SDSEC', 'Geo_SDUNI', 'Geo_UR', 'Geo_PCI', 'Geo_TAZ', 'Geo_UGA', 'Geo_BTTR', 'Geo_BTBG', 'Geo_PUMA5', 'Geo_PUMA1']
df2 = df2.dropna(axis=1,how="all")
df2.head()
| Geo_FIPS | Geo_GEOID | Geo_NAME | Geo_QName | Geo_STUSAB | Geo_SUMLEV | Geo_GEOCOMP | Geo_FILEID | Geo_LOGRECNO | Geo_STATE | Geo_COUNTY | Geo_TRACT | Geo_BLKGRP | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | 15000US060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | ca | 150 | 0 | ACSSF | 15884 | 06 | 037 | 219020 | 3 | 323 | 103 | 35 | 107 | 51 | 27 |
| 1 | 060372340001 | 15000US060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16105 | 06 | 037 | 234000 | 1 | 628 | 181 | 149 | 112 | 36 | 150 |
| 2 | 060372340002 | 15000US060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16106 | 06 | 037 | 234000 | 2 | 260 | 14 | 61 | 29 | 11 | 145 |
| 3 | 060372340003 | 15000US060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16107 | 06 | 037 | 234000 | 3 | 299 | 18 | 87 | 25 | 29 | 140 |
| 4 | 060372340004 | 15000US060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16108 | 06 | 037 | 234000 | 4 | 580 | 201 | 32 | 138 | 110 | 99 |
columns_to_drop = ['Geo_GEOID','Geo_STUSAB','Geo_SUMLEV','Geo_GEOCOMP','Geo_FILEID','Geo_LOGRECNO','Geo_STATE','Geo_COUNTY','Geo_TRACT']
df2.head()
| Geo_FIPS | Geo_GEOID | Geo_NAME | Geo_QName | Geo_STUSAB | Geo_SUMLEV | Geo_GEOCOMP | Geo_FILEID | Geo_LOGRECNO | Geo_STATE | Geo_COUNTY | Geo_TRACT | Geo_BLKGRP | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | 15000US060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | ca | 150 | 0 | ACSSF | 15884 | 06 | 037 | 219020 | 3 | 323 | 103 | 35 | 107 | 51 | 27 |
| 1 | 060372340001 | 15000US060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16105 | 06 | 037 | 234000 | 1 | 628 | 181 | 149 | 112 | 36 | 150 |
| 2 | 060372340002 | 15000US060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16106 | 06 | 037 | 234000 | 2 | 260 | 14 | 61 | 29 | 11 | 145 |
| 3 | 060372340003 | 15000US060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16107 | 06 | 037 | 234000 | 3 | 299 | 18 | 87 | 25 | 29 | 140 |
| 4 | 060372340004 | 15000US060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | ca | 150 | 0 | ACSSF | 16108 | 06 | 037 | 234000 | 4 | 580 | 201 | 32 | 138 | 110 | 99 |
df2 = df2.drop(columns_to_drop,axis=1)
df2.head()
| Geo_FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | SE_B14001_001 | SE_B14001_002 | SE_B14001_003 | SE_B14001_004 | SE_B14001_005 | SE_B14001_006 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | 3 | 323 | 103 | 35 | 107 | 51 | 27 |
| 1 | 060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | 1 | 628 | 181 | 149 | 112 | 36 | 150 |
| 2 | 060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | 2 | 260 | 14 | 61 | 29 | 11 | 145 |
| 3 | 060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | 3 | 299 | 18 | 87 | 25 | 29 | 140 |
| 4 | 060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | 4 | 580 | 201 | 32 | 138 | 110 | 99 |
df2.columns = ['FIPS',
'Geo_NAME',
'Geo_QName',
'Geo_BLKGRP',
'Total Households in Leimert Park',
'Household Income Less than $25,000',
'Household Income $25,000 to $49,999',
'Household Income $50,000 to $74,999',
'Household Income $75,000 to $99,999',
'Household Income $100,000 or More']
df2.head()
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Leimert Park | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | 3 | 323 | 103 | 35 | 107 | 51 | 27 |
| 1 | 060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | 1 | 628 | 181 | 149 | 112 | 36 | 150 |
| 2 | 060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | 2 | 260 | 14 | 61 | 29 | 11 | 145 |
| 3 | 060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | 3 | 299 | 18 | 87 | 25 | 29 | 140 |
| 4 | 060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | 4 | 580 | 201 | 32 | 138 | 110 | 99 |
df2_sum= df2.sum().reset_index()
df2_sum=df2_sum.set_index('index').T
df2_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Leimert Park | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 34 | 5711 | 1565 | 1242 | 1013 | 550 | 1341 |
df2_sum['% Less than $25K'] = df2_sum['Household Income Less than $25,000']/df2_sum['Total Households in Leimert Park']*100
df2_sum['% More than $100K'] = df2_sum['Household Income $100,000 or More']/df2_sum['Total Households in Leimert Park']*100
df2_sum['neighborhood'] = 'Leimert'
df2_sum.plot.bar(x = 'neighborhood', y='% Less than $25K', title="Percentage of Households with Income Less than $25K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa82b1df670>
df2_sum.plot.bar(x = 'neighborhood', y='% More than $100K', title="Percentage of Households with Income More than $100K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa82b1bf400>
df2['neighborhood'] = 'Leimert'
df2['p_less_25k'] = df2['Household Income Less than $25,000']/df2['Total Households in Leimert Park']*100
df2['p_more_100k'] = df2['Household Income $100,000 or More']/df2['Total Households in Leimert Park']*100
df2['Total Households'] = df2['Total Households in Leimert Park']
df2.head()
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Leimert Park | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | neighborhood | p_less_25k | p_more_100k | Total Households | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | 3 | 323 | 103 | 35 | 107 | 51 | 27 | Leimert | 31.888545 | 8.359133 | 323 |
| 1 | 060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | 1 | 628 | 181 | 149 | 112 | 36 | 150 | Leimert | 28.821656 | 23.885350 | 628 |
| 2 | 060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | 2 | 260 | 14 | 61 | 29 | 11 | 145 | Leimert | 5.384615 | 55.769231 | 260 |
| 3 | 060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | 3 | 299 | 18 | 87 | 25 | 29 | 140 | Leimert | 6.020067 | 46.822742 | 299 |
| 4 | 060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | 4 | 580 | 201 | 32 | 138 | 110 | 99 | Leimert | 34.655172 | 17.068966 | 580 |
px.bar(df2, x="neighborhood", y=["Household Income Less than $25,000",
"Household Income $25,000 to $49,999",
"Household Income $50,000 to $74,999",
"Household Income $75,000 to $99,999",
"Household Income $100,000 or More"], title="Income Breakdown by Block Group in Leimert Park (2017)",
labels={'Geo_NAME':'Census Tract Block Group','value':'Total Households in Leimert Park', 'variable': 'Household Income'})
income_merged= df_sum.append(df2_sum)
income_merged
| FIPS | Geo_NAME | Geo_QName | Geo_BLKGRP | Total Households in Atwater Village | Household Income Less than $25,000 | Household Income $25,000 to $49,999 | Household Income $50,000 to $74,999 | Household Income $75,000 to $99,999 | Household Income $100,000 or More | % Less than $25K | % More than $100K | neighborhood | year | Total Households in Leimert Park | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1Block Group 2Block Group 3Block G... | Block Group 1, Census Tract 1863.01, Los Angel... | 31 | 8801 | 1982 | 1644 | 1413 | 1028 | 2734 | 22.5202 | 31.0647 | Atwater | 2018 | NaN |
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 34 | NaN | 1565 | 1242 | 1013 | 550 | 1341 | 27.4033 | 23.481 | Leimert | NaN | 5711 |
income_merged.plot.bar(x = 'neighborhood', y='% Less than $25K', title="Percentage of Households with Income Less than $25K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828e4aa60>
income_merged.plot.bar(x = 'neighborhood', y='% More than $100K', title="Percentage of Households with Income More than $100K (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828e05460>
df3 = pd.read_csv('data/Atwater2018_Race.csv')
df3 = pd.read_csv(
'data/Atwater2017_Race.csv',
dtype=
{
'Geo_FIPS':str,
'Geo_STATE':str,
'Geo_COUNTY': str
}
)
df3.columns[df3.isna().all()].tolist()
['Geo_US', 'Geo_REGION', 'Geo_DIVISION', 'Geo_STATECE', 'Geo_COUSUB', 'Geo_PLACE', 'Geo_PLACESE', 'Geo_CONCIT', 'Geo_AIANHH', 'Geo_AIANHHFP', 'Geo_AIHHTLI', 'Geo_AITSCE', 'Geo_AITS', 'Geo_ANRC', 'Geo_CBSA', 'Geo_CSA', 'Geo_METDIV', 'Geo_MACC', 'Geo_MEMI', 'Geo_NECTA', 'Geo_CNECTA', 'Geo_NECTADIV', 'Geo_UA', 'Geo_UACP', 'Geo_CDCURR', 'Geo_SLDU', 'Geo_SLDL', 'Geo_VTD', 'Geo_ZCTA3', 'Geo_ZCTA5', 'Geo_SUBMCD', 'Geo_SDELM', 'Geo_SDSEC', 'Geo_SDUNI', 'Geo_UR', 'Geo_PCI', 'Geo_TAZ', 'Geo_UGA', 'Geo_BTTR', 'Geo_BTBG', 'Geo_PUMA5', 'Geo_PUMA1']
df3 = df3.dropna(axis=1,how="all")
columns_to_drop = ['Geo_GEOID','Geo_STUSAB','Geo_SUMLEV','Geo_GEOCOMP','Geo_FILEID','Geo_LOGRECNO','Geo_STATE', 'Geo_COUNTY','SE_A04001_002','SE_A04001_011','SE_A04001_012','SE_A04001_013','SE_A04001_014','SE_A04001_015','SE_A04001_016','SE_A04001_017']
df3 = df3.drop(columns_to_drop,axis=1)
df3.head()
| Geo_FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | SE_A04001_001 | SE_A04001_003 | SE_A04001_004 | SE_A04001_005 | SE_A04001_006 | SE_A04001_007 | SE_A04001_008 | SE_A04001_009 | SE_A04001_010 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 186301 | 1 | 881 | 322 | 53 | 0 | 78 | 0 | 0 | 44 | 384 |
| 1 | 060371863012 | Block Group 2, Census Tract 1863.01, Los Angel... | Block Group 2, Census Tract 1863.01, Los Angel... | 186301 | 2 | 1349 | 103 | 23 | 0 | 89 | 0 | 0 | 6 | 1128 |
| 2 | 060371863013 | Block Group 3, Census Tract 1863.01, Los Angel... | Block Group 3, Census Tract 1863.01, Los Angel... | 186301 | 3 | 889 | 59 | 25 | 0 | 196 | 0 | 0 | 4 | 605 |
| 3 | 060371863021 | Block Group 1, Census Tract 1863.02, Los Angel... | Block Group 1, Census Tract 1863.02, Los Angel... | 186302 | 1 | 1573 | 566 | 26 | 0 | 409 | 0 | 0 | 84 | 488 |
| 4 | 060371864011 | Block Group 1, Census Tract 1864.01, Los Angel... | Block Group 1, Census Tract 1864.01, Los Angel... | 186401 | 1 | 2676 | 78 | 0 | 0 | 312 | 0 | 0 | 7 | 2279 |
columns3 = list(df3) # this is the same as df.columns.to_list()
columns3
['Geo_FIPS', 'Geo_NAME', 'Geo_QName', 'Geo_TRACT', 'Geo_BLKGRP', 'SE_A04001_001', 'SE_A04001_003', 'SE_A04001_004', 'SE_A04001_005', 'SE_A04001_006', 'SE_A04001_007', 'SE_A04001_008', 'SE_A04001_009', 'SE_A04001_010']
##RENAMED TO INCLUDE PROPER TITLES
df3.columns = ['FIPS',
'Geo_NAME',
'Geo_QName',
'Geo_TRACT',
'Geo_BLKGRP',
'Total Population',
'White',
'Black',
'AmIndian',
'Native Hawaiian and Other Pacific Islander Alone',
'Asian',
'Some Other Race Alone',
'Two or More Races',
'Hispanic or Latino']
df3.head()
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 186301 | 1 | 881 | 322 | 53 | 0 | 78 | 0 | 0 | 44 | 384 |
| 1 | 060371863012 | Block Group 2, Census Tract 1863.01, Los Angel... | Block Group 2, Census Tract 1863.01, Los Angel... | 186301 | 2 | 1349 | 103 | 23 | 0 | 89 | 0 | 0 | 6 | 1128 |
| 2 | 060371863013 | Block Group 3, Census Tract 1863.01, Los Angel... | Block Group 3, Census Tract 1863.01, Los Angel... | 186301 | 3 | 889 | 59 | 25 | 0 | 196 | 0 | 0 | 4 | 605 |
| 3 | 060371863021 | Block Group 1, Census Tract 1863.02, Los Angel... | Block Group 1, Census Tract 1863.02, Los Angel... | 186302 | 1 | 1573 | 566 | 26 | 0 | 409 | 0 | 0 | 84 | 488 |
| 4 | 060371864011 | Block Group 1, Census Tract 1864.01, Los Angel... | Block Group 1, Census Tract 1864.01, Los Angel... | 186401 | 1 | 2676 | 78 | 0 | 0 | 312 | 0 | 0 | 7 | 2279 |
df3_sum= df3.sum().reset_index()
df3_sum
| index | 0 | |
|---|---|---|
| 0 | FIPS | 0603718630110603718630120603718630130603718630... |
| 1 | Geo_NAME | Block Group 1, Census Tract 1863.01, Los Angel... |
| 2 | Geo_QName | Block Group 1, Census Tract 1863.01, Los Angel... |
| 3 | Geo_TRACT | 3368419 |
| 4 | Geo_BLKGRP | 31 |
| 5 | Total Population | 25387 |
| 6 | White | 5639 |
| 7 | Black | 270 |
| 8 | AmIndian | 157 |
| 9 | Native Hawaiian and Other Pacific Islander Alone | 4663 |
| 10 | Asian | 66 |
| 11 | Some Other Race Alone | 48 |
| 12 | Two or More Races | 721 |
| 13 | Hispanic or Latino | 13823 |
df3_sum = df3_sum.set_index('index').T
type(df3_sum)
pandas.core.frame.DataFrame
df3_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 |
df3_sum['% Latino'] = df3_sum['Hispanic or Latino']/df3_sum['Total Population']*100
df3_sum['% White'] = df3_sum['White']/df3_sum['Total Population']*100
df3_sum['% Black'] = df3_sum['Black']/df3_sum['Total Population']*100
df3_sum['neighborhood'] = 'Atwater'
df3_sum['year'] = '2018'
df3_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | % Latino | % White | % Black | neighborhood | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 | 54.4491 | 22.2122 | 1.06354 | Atwater | 2018 |
df4 = pd.read_csv('data/Leimert2018_Race.csv')
df4 = pd.read_csv(
'data/Leimert2018_Race.csv',
dtype=
{
'Geo_FIPS':str,
'Geo_STATE':str,
'Geo_COUNTY': str
}
)
df4.columns[df4.isna().all()].tolist()
['Geo_US', 'Geo_REGION', 'Geo_DIVISION', 'Geo_STATECE', 'Geo_COUSUB', 'Geo_PLACE', 'Geo_PLACESE', 'Geo_CONCIT', 'Geo_AIANHH', 'Geo_AIANHHFP', 'Geo_AIHHTLI', 'Geo_AITSCE', 'Geo_AITS', 'Geo_ANRC', 'Geo_CBSA', 'Geo_CSA', 'Geo_METDIV', 'Geo_MACC', 'Geo_MEMI', 'Geo_NECTA', 'Geo_CNECTA', 'Geo_NECTADIV', 'Geo_UA', 'Geo_UACP', 'Geo_CDCURR', 'Geo_SLDU', 'Geo_SLDL', 'Geo_VTD', 'Geo_ZCTA3', 'Geo_ZCTA5', 'Geo_SUBMCD', 'Geo_SDELM', 'Geo_SDSEC', 'Geo_SDUNI', 'Geo_UR', 'Geo_PCI', 'Geo_TAZ', 'Geo_UGA', 'Geo_BTTR', 'Geo_BTBG', 'Geo_PUMA5', 'Geo_PUMA1']
df4 = df4.dropna(axis=1,how="all")
columns_to_drop = ['Geo_GEOID','Geo_STUSAB','Geo_SUMLEV','Geo_GEOCOMP','Geo_FILEID','Geo_LOGRECNO','Geo_STATE', 'Geo_COUNTY','SE_A04001_002','SE_A04001_011','SE_A04001_012','SE_A04001_013','SE_A04001_014','SE_A04001_015','SE_A04001_016','SE_A04001_017']
df4 = df4.drop(columns_to_drop,axis=1)
df4.head()
| Geo_FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | SE_A04001_001 | SE_A04001_003 | SE_A04001_004 | SE_A04001_005 | SE_A04001_006 | SE_A04001_007 | SE_A04001_008 | SE_A04001_009 | SE_A04001_010 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | 219020 | 3 | 1078 | 8 | 424 | 0 | 28 | 0 | 0 | 0 | 618 |
| 1 | 060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | 234000 | 1 | 1890 | 14 | 727 | 0 | 0 | 0 | 0 | 36 | 1113 |
| 2 | 060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | 234000 | 2 | 612 | 98 | 389 | 0 | 10 | 0 | 0 | 0 | 115 |
| 3 | 060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | 234000 | 3 | 781 | 88 | 618 | 0 | 20 | 0 | 0 | 27 | 28 |
| 4 | 060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | 234000 | 4 | 1307 | 98 | 898 | 0 | 5 | 0 | 0 | 44 | 262 |
columns4 = list(df4) # this is the same as df.columns.to_list()
columns4
['Geo_FIPS', 'Geo_NAME', 'Geo_QName', 'Geo_TRACT', 'Geo_BLKGRP', 'SE_A04001_001', 'SE_A04001_003', 'SE_A04001_004', 'SE_A04001_005', 'SE_A04001_006', 'SE_A04001_007', 'SE_A04001_008', 'SE_A04001_009', 'SE_A04001_010']
df4.columns = ['FIPS',
'Geo_NAME',
'Geo_QName',
'Geo_TRACT',
'Geo_BLKGRP',
'Total Population',
'White',
'Black',
'AmIndian',
'Native Hawaiian and Other Pacific Islander Alone',
'Asian',
'Some Other Race Alone',
'Two or More Races',
'Hispanic or Latino']
df4['Total Population'].head()
0 1078 1 1890 2 612 3 781 4 1307 Name: Total Population, dtype: int64
df4.head()
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060372190203 | Block Group 3 | Block Group 3, Census Tract 2190.20, Los Angel... | 219020 | 3 | 1078 | 8 | 424 | 0 | 28 | 0 | 0 | 0 | 618 |
| 1 | 060372340001 | Block Group 1 | Block Group 1, Census Tract 2340, Los Angeles ... | 234000 | 1 | 1890 | 14 | 727 | 0 | 0 | 0 | 0 | 36 | 1113 |
| 2 | 060372340002 | Block Group 2 | Block Group 2, Census Tract 2340, Los Angeles ... | 234000 | 2 | 612 | 98 | 389 | 0 | 10 | 0 | 0 | 0 | 115 |
| 3 | 060372340003 | Block Group 3 | Block Group 3, Census Tract 2340, Los Angeles ... | 234000 | 3 | 781 | 88 | 618 | 0 | 20 | 0 | 0 | 27 | 28 |
| 4 | 060372340004 | Block Group 4 | Block Group 4, Census Tract 2340, Los Angeles ... | 234000 | 4 | 1307 | 98 | 898 | 0 | 5 | 0 | 0 | 44 | 262 |
df4_sum= df4.sum().reset_index()
df4_sum=df4_sum.set_index('index').T
type(df4_sum)
pandas.core.frame.DataFrame
df4_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 |
df4_sum['% Black'] = (df4_sum['Black']/df4_sum['Total Population'])*100
df4_sum['% White'] = (df4_sum['White']/df4_sum['Total Population'])*100
df4_sum['% Latino'] = (df4_sum['Hispanic or Latino']/df4_sum['Total Population'])*100
df4_sum.head()
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | % Black | % White | % Latino |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 | 63.941 | 5.68807 | 23.8931 |
df4_sum['neighborhood'] = 'Leimert'
df4_sum['year'] = '2017'
df4_sum
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | % Black | % White | % Latino | neighborhood | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 | 63.941 | 5.68807 | 23.8931 | Leimert | 2017 |
race_merged= df3_sum.append(df4_sum)
race_merged
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | % Latino | % White | % Black | neighborhood | year | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 | 54.4491 | 22.2122 | 1.06354 | Atwater | 2018 |
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 | 23.8931 | 5.68807 | 63.941 | Leimert | 2017 |
race_merged.plot.bar(x = 'neighborhood', y='% White', title="Percentage of White Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828dad490>
race_merged.plot.bar(x = 'neighborhood', y='% Black', title="Percentage of Black Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828cf5250>
race_merged.plot.bar(x = 'neighborhood', y='% Latino', title="Percentage of Latino Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828cc9e20>
# create a new column and normalize
# also repeat this for 'p_White'
df3['neighborhood'] = 'Atwater'
df3['p_Latino'] = df3['Hispanic or Latino']/df3['Total Population']*100
df3['p_White'] = df3['White']/df3['Total Population']*100
df3['p_Black'] = df3['Black']/df3['Total Population']*100
df4['neighborhood'] = 'Leimert'
df4['p_Black'] = df4['Black']/df4['Total Population']*100
df4['p_White'] = df4['White']/df4['Total Population']*100
df4['p_Latino'] = df4['Hispanic or Latino']/df4['Total Population']*100
df3.head()
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Latino | p_White | p_Black | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 186301 | 1 | 881 | 322 | 53 | 0 | 78 | 0 | 0 | 44 | 384 | Atwater | 43.586833 | 36.549376 | 6.015891 |
| 1 | 060371863012 | Block Group 2, Census Tract 1863.01, Los Angel... | Block Group 2, Census Tract 1863.01, Los Angel... | 186301 | 2 | 1349 | 103 | 23 | 0 | 89 | 0 | 0 | 6 | 1128 | Atwater | 83.617494 | 7.635285 | 1.704967 |
| 2 | 060371863013 | Block Group 3, Census Tract 1863.01, Los Angel... | Block Group 3, Census Tract 1863.01, Los Angel... | 186301 | 3 | 889 | 59 | 25 | 0 | 196 | 0 | 0 | 4 | 605 | Atwater | 68.053993 | 6.636670 | 2.812148 |
| 3 | 060371863021 | Block Group 1, Census Tract 1863.02, Los Angel... | Block Group 1, Census Tract 1863.02, Los Angel... | 186302 | 1 | 1573 | 566 | 26 | 0 | 409 | 0 | 0 | 84 | 488 | Atwater | 31.023522 | 35.982200 | 1.652893 |
| 4 | 060371864011 | Block Group 1, Census Tract 1864.01, Los Angel... | Block Group 1, Census Tract 1864.01, Los Angel... | 186401 | 1 | 2676 | 78 | 0 | 0 | 312 | 0 | 0 | 7 | 2279 | Atwater | 85.164425 | 2.914798 | 0.000000 |
df3.head()
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Latino | p_White | p_Black | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 060371863011 | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 186301 | 1 | 881 | 322 | 53 | 0 | 78 | 0 | 0 | 44 | 384 | Atwater | 43.586833 | 36.549376 | 6.015891 |
| 1 | 060371863012 | Block Group 2, Census Tract 1863.01, Los Angel... | Block Group 2, Census Tract 1863.01, Los Angel... | 186301 | 2 | 1349 | 103 | 23 | 0 | 89 | 0 | 0 | 6 | 1128 | Atwater | 83.617494 | 7.635285 | 1.704967 |
| 2 | 060371863013 | Block Group 3, Census Tract 1863.01, Los Angel... | Block Group 3, Census Tract 1863.01, Los Angel... | 186301 | 3 | 889 | 59 | 25 | 0 | 196 | 0 | 0 | 4 | 605 | Atwater | 68.053993 | 6.636670 | 2.812148 |
| 3 | 060371863021 | Block Group 1, Census Tract 1863.02, Los Angel... | Block Group 1, Census Tract 1863.02, Los Angel... | 186302 | 1 | 1573 | 566 | 26 | 0 | 409 | 0 | 0 | 84 | 488 | Atwater | 31.023522 | 35.982200 | 1.652893 |
| 4 | 060371864011 | Block Group 1, Census Tract 1864.01, Los Angel... | Block Group 1, Census Tract 1864.01, Los Angel... | 186401 | 1 | 2676 | 78 | 0 | 0 | 312 | 0 | 0 | 7 | 2279 | Atwater | 85.164425 | 2.914798 | 0.000000 |
df3_sum= df3.sum().reset_index()
df3_sum=df3_sum.set_index('index').T
type(df3_sum)
pandas.core.frame.DataFrame
df3_sum['year'] = '2018'
df3_sum
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Latino | p_White | p_Black | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 | AtwaterAtwaterAtwaterAtwaterAtwaterAtwaterAtwa... | 948.999 | 425.794 | 22.0826 | 2018 |
df3_sum['neighborhood'] = 'Atwater'
df3_sum
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Latino | p_White | p_Black | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 | Atwater | 948.999 | 425.794 | 22.0826 | 2018 |
df4_sum= df4.sum().reset_index()
df4_sum=df4_sum.set_index('index').T
type(df4_sum)
pandas.core.frame.DataFrame
df4_sum['neighborhood'] = 'Leimert'
df4_sum['year'] = '2018'
df4_sum
| index | FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Black | p_White | p_Latino | year |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 | Leimert | 857.457 | 81.1305 | 275.153 | 2018 |
df3['Total Households'] = 'Total Households in Atwater Village'
df4['Total Households'] = 'Total Households in Leimert Park'
race_merged= df3_sum.append(df4_sum)
race_merged
| FIPS | Geo_NAME | Geo_QName | Geo_TRACT | Geo_BLKGRP | Total Population | White | Black | AmIndian | Native Hawaiian and Other Pacific Islander Alone | Asian | Some Other Race Alone | Two or More Races | Hispanic or Latino | neighborhood | p_Latino | p_White | p_Black | year | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0603718630110603718630120603718630130603718630... | Block Group 1, Census Tract 1863.01, Los Angel... | Block Group 1, Census Tract 1863.01, Los Angel... | 3368419 | 31 | 25387 | 5639 | 270 | 157 | 4663 | 66 | 48 | 721 | 13823 | Atwater | 948.999 | 425.794 | 22.0826 | 2018 |
| 0 | 0603721902030603723400010603723400020603723400... | Block Group 3Block Group 1Block Group 2Block G... | Block Group 3, Census Tract 2190.20, Los Angel... | 3028820 | 34 | 12535 | 713 | 8015 | 0 | 401 | 8 | 11 | 392 | 2995 | Leimert | 275.153 | 81.1305 | 857.457 | 2018 |
race_merged.plot.bar(x = 'neighborhood', y='p_White', title="Percentage of White Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828c893d0>
race_merged.plot.bar(x = 'neighborhood', y='p_Black', title="Percentage of Black Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa828c02640>
race_merged.plot.bar(x = 'neighborhood', y='p_Latino', title="Percentage of Latino Population (2018)")
<matplotlib.axes._subplots.AxesSubplot at 0x7fa8547b4430>
import plotly.express as px
import pandas as pd
import geopandas as gpd
block_groups= gpd.read_file('data/tl_2019_06_bg.shp')
# subset to only LA block groups
block_groups_LA = block_groups[block_groups.COUNTYFP == '037']
block_groups_LA.shape
(6425, 13)
columns = list(block_groups)
columns
['STATEFP', 'COUNTYFP', 'TRACTCE', 'BLKGRPCE', 'GEOID', 'NAMELSAD', 'MTFCC', 'FUNCSTAT', 'ALAND', 'AWATER', 'INTPTLAT', 'INTPTLON', 'geometry']
blocks = block_groups_LA[['GEOID','geometry']]
blocks.head()
| GEOID | geometry | |
|---|---|---|
| 30 | 060371872002 | POLYGON ((-118.25704 34.10773, -118.25664 34.1... |
| 31 | 060371873001 | POLYGON ((-118.26544 34.11216, -118.26540 34.1... |
| 32 | 060371873002 | POLYGON ((-118.25924 34.09416, -118.25924 34.0... |
| 36 | 060375437024 | POLYGON ((-118.27553 33.80936, -118.27553 33.8... |
| 37 | 060375437025 | POLYGON ((-118.27549 33.81246, -118.27549 33.8... |
blocks.columns = ['FIPS','geometry']
# create a new dataframe based on the join (ATWATER)
blocks_units=blocks.merge(df,on="FIPS")
# subsetting by neighborhood
axA1=blocks_units[blocks_units.neighborhood=='Atwater'].plot(figsize=(12,10),
column='p_less_25k',
cmap='cool',
legend=True,
scheme='equal_interval')
# get rid of the axis
axA1.axis('off')
# add a title
axA1.set_title('Census Block Groups in Atwater Village with Annual Household Income Less than $25K (2018)')
Text(0.5, 1.0, 'Census Block Groups in Atwater Village with Annual Household Income Less than $25K (2018)')
# create a new dataframe based on the join (Leimert)
blocks_units2=blocks.merge(df2,on="FIPS")
# subsetting by neighborhood
axL1= blocks_units2[blocks_units2.neighborhood=='Leimert'].plot(figsize=(12,10),
column='p_less_25k',
cmap='cool',
legend=True,
scheme='equal_interval')
# get rid of the axis
axL1.axis('off')
# add a title
axL1.set_title('Census Block Groups in Leimert Park with Annual Household Income Less than $25K (2018)')
Text(0.5, 1.0, 'Census Block Groups in Leimert Park with Annual Household Income Less than $25K (2018)')
# subsetting by neighborhood
axA2=blocks_units[blocks_units.neighborhood=='Atwater'].plot(figsize=(12,10),
column='p_more_100k',
cmap='cool',
legend=True,
scheme='equal_interval')
# get rid of the axis
axA2.axis('off')
# add a title
axA2.set_title('Census Block Groups in Atwater Village with Annual Household Income More than $100K (2018)')
Text(0.5, 1.0, 'Census Block Groups in Atwater Village with Annual Household Income More than $100K (2018)')
# subsetting by neighborhood
axL2 = blocks_units2[blocks_units2.neighborhood=='Leimert'].plot(figsize=(12,10),
column='p_more_100k',
cmap='cool',
legend=True,
scheme='equal_interval')
# get rid of the axis
axL2.axis('off')
# add a title
axL2.set_title('Census Block Groups in Leimert Park with Annual Household Income More than $100K (2018)')
Text(0.5, 1.0, 'Census Block Groups in Leimert Park with Annual Household Income More than $100K (2018)')